
package edu.uoc.tdp.servidor.impl.proves;


import edu.uoc.tdp.beans.proves.*;


import edu.uoc.tdp.common.EOlympicsException;
import edu.uoc.tdp.common.EOlympicsExceptionRonda;
import edu.uoc.tdp.common.RemotProvesInterface;
import edu.uoc.tdp.bbdd.GestorDiscConnexio;
import edu.uoc.tdp.servidor.bbdd.proves.*;
import java.io.Serializable;
import java.rmi.RemoteException;
import java.rmi.server.UnicastRemoteObject;

import java.util.Date;
import java.util.List;


/**
 * Classe que implementa l'interfície RemotProvesInterface
 * Es definiran tots els mètodes que necessitem per fer servir a la
 * capa de presentació. Per accedir a BBDD sempre haurem de passar per 
 * la classe GestorXXX corresponent
 * @author Grup TDP 1X4J
 */
public class RemotProvesImpl extends UnicastRemoteObject 
                           implements RemotProvesInterface, Serializable    
{
    
    private static final long serialVersionUID = 1L;
    private GestorDiscConnexio gestorBD;

    /**
     * Constructor de la clase<br>
     * Crea una conexió a la Base de Dades
     * @exception RemoteException
     * @exception EOlympicsException
     */    
    public RemotProvesImpl() throws RemoteException, EOlympicsException {
        super();
        gestorBD = new GestorDiscConnexio();
        gestorBD.obreConnexioBD();
    }

    //TODO: Definició de mètodes que necessitem per pintar a les pantalles.
    //        Per fer consultes a BBDD sempre passarem pels GestorXXX

    @Override
    public Prova getProva(Integer idProva) throws RemoteException, EOlympicsException {
        Prova prova=null;
        GestorProva gProva= new GestorProva(gestorBD);
        GestorRonda gRonda=new GestorRonda(gestorBD);
        prova=gProva.getProva(idProva);        
        prova.setRondaEliminatoria(gRonda.getRondaEliminatoria(idProva));        
        prova.setRondaFinal(gRonda.getRondaFinal(idProva));        
        return prova;
    }

    @Override
    public List<Prova> getProves(String descripcio, Date ini, Date fi, EstatProva estat) throws RemoteException, EOlympicsException {
        throw new UnsupportedOperationException("Not supported yet.");
    }
    
    public void guardarProva(Prova prova)throws RemoteException, EOlympicsException,EOlympicsExceptionRonda{
        GestorProva gProva= new GestorProva(gestorBD);
        GestorRonda gRonda=new GestorRonda(gestorBD);        
        gProva.guardarProva(prova);
        RondaEliminatoria ronda=prova.getRondaEliminatoria();
        if(ronda != null) gRonda.setModificacioRondaEliminatoria(prova.getIdProva(), ronda);
        
        RondaFinal rondaf=prova.getRondaFinal();
        if(ronda != null)gRonda.setModificacioRondaFinal(prova.getIdProva(), rondaf);               
    }
    

    
}
